// 改变 this 的指向，可以接收多个参数
Function.prototype.myCall = function (ctx){
  ctx = ctx || window // ctx 就是 obj
  let fn = Symbol()
  ctx[fn] = this // this 就是 foo
  let result = ctx[fn](...arguments)
  delete ctx[fn]
  return result
}

let obj = {name: 'hugo'}
function foo(){return this.name}
// 就是把 foo 函数里的 this 指向 obj
console.log(foo.myCall(obj)) // hugo